/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.sistemas.beans;

import cip.util.ControladorAbstracto;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.cip.esymons.sistemas.bc.detalleRequerimientoDelegate;
import org.cip.esymons.sistemas.bc.requerimientoDelegate;
import org.cip.esymons.sistemas.be.SisDetalleRequerimiento;
import org.cip.esymons.sistemas.be.SisRequerimiento;

/**
 *
 * @author WILLIAM
 */
public class jasperController {
    
    private detalleRequerimientoDelegate delegadoDetalle;

    private String cantidad,responsable;
    private Date fecha;
    private Integer opcion;

    public jasperController() {
        
        delegadoDetalle = new detalleRequerimientoDelegate();
        cantidad = "";
        fecha = null;
    }

    public String getResponsable() {
        return responsable;
    }

    public void setResponsable(String responsable) {
        this.responsable = responsable;
    }

    public String getCantidad() {
        return cantidad;
    }

    public void setCantidad(String cantidad) {
        this.cantidad = cantidad;
    }

    public Integer getOpcion() {
        return opcion;
    }

    public void setOpcion(Integer opcion) {
        this.opcion = opcion;
    }

    public detalleRequerimientoDelegate getDelegadoDetalle() {
        return delegadoDetalle;
    }

    public void setDelegadoDetalle(detalleRequerimientoDelegate delegadoDetalle) {
        this.delegadoDetalle = delegadoDetalle;
    }
    
    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public String terminar(){

        delegadoDetalle = new detalleRequerimientoDelegate();
        cantidad = "";
        fecha = null;
        opcion = 0;

        return null;

    }

    @SuppressWarnings("static-access")
    public String exportarPDF() {
      
        try{
        Map parametros = new HashMap();
        List<SisDetalleRequerimiento> listaRequerimientos;
        listaRequerimientos = new ArrayList<SisDetalleRequerimiento>();
        if(opcion == 0 || opcion == null){

            opcion = 2;
        }
        switch(opcion){
            
            case 1: listaRequerimientos = delegadoDetalle.listaTodosPorFecha(fecha);
                    cantidad = "Exiten "+listaRequerimientos.size()+" en lista";break;
            case 2: listaRequerimientos = delegadoDetalle.listaTodos();
                    cantidad = "Exiten "+listaRequerimientos.size()+" en lista";break;
            case 3: exportarPDFxResponsable();break;
        }

        HttpServletRequest request1 = ControladorAbstracto.getRequest();
        String Imagen = "/image/logocipcdll.gif";
        String logo = request1.getRealPath(Imagen);
        parametros.put("logo", logo);
        parametros.put("cantidad", cantidad);

        if (listaRequerimientos.size() > 0) {
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";
            rutaJasper = ruta.getRutaReporte() + "rptRequerimientos.jasper";
            rutaPDF = ruta.getRuta() + "rptRequerimientos.pdf";//ruta windows prueba
//            rutaPDF = ruta.getRutaPDF() + "rptRequerimientos.pdf";//ruta linux prueba
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRutaPDF() + "rptFormato.pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif
            try {
                HttpServletRequest request = ControladorAbstracto.getRequest();
                rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            try {
                File entrada = new File(rutaJasper);
                JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaRequerimientos));
                if (ruta.generarPDF(rutaPDF, print)) {
                }
            } catch (Exception e) {
                System.out.println("-------" + e.toString());
            }
        } else {
            mostrarMensaje("Error", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
        }
        opcion = 0;
        responsable = "NN";
        fecha = null;
      }catch(Exception ex){
          return null;
      }
        return "";
    }

    @SuppressWarnings("static-access")
    public String exportarPDFxResponsable() {

        try{
        Map parametros = new HashMap();
        List<SisDetalleRequerimiento> listaRequerimientos;
        listaRequerimientos = new ArrayList<SisDetalleRequerimiento>();

        if(responsable.equalsIgnoreCase("NN")){
            mostrarMensaje("Error", "Debe seleccionar un responsable...", FacesMessage.SEVERITY_ERROR);
        }else{

        listaRequerimientos = delegadoDetalle.listaTodosPorResponsable(responsable);
        cantidad = "Exiten "+listaRequerimientos.size()+" en lista";

        HttpServletRequest request1 = ControladorAbstracto.getRequest();
        String Imagen = "/image/logocipcdll.gif";
        String logo = request1.getRealPath(Imagen);
        parametros.put("logo", logo);
        parametros.put("cantidad", cantidad);

        if (listaRequerimientos.size() > 0) {
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";
            rutaJasper = ruta.getRutaReporte() + "rptRequerimientoResponsable.jasper";
            rutaPDF = ruta.getRuta() + "rptRequerimientos.pdf";//ruta windows prueba
//            rutaPDF = ruta.getRutaPDF() + "rptRequerimientos.pdf";//ruta linux prueba
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRutaPDF() + "rptFormato.pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif
            try {
                HttpServletRequest request = ControladorAbstracto.getRequest();
                rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            try {
                File entrada = new File(rutaJasper);
                JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaRequerimientos));
                if (ruta.generarPDF(rutaPDF, print)) {
                }
            } catch (Exception e) {
                System.out.println("-------" + e.toString());
            }
        } else {
            mostrarMensaje("Error", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
        }
       }
        opcion = 0;
        responsable = "NN";
        fecha = null;
      }catch(Exception ex){
          return null;
      }
        return "";
    }


    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

}
